package model

import "fmt"

/*
	要求：
	1) 创建程序,在model包中定义Account结构体：在main函数中体会Golang的封装性。
	2) Account结构体要求具有字段：账号（长度在6-10之间）、余额(必须>20)、密码（必须是六位数）
	3) 通过SetXxx的方法给Account 的字段赋值。
	4) 在main函数中测试
	5) 通过SetXxx的方法给Account的字段赋值 通过GetXxx方法获取字段的值。
*/

type Account struct {
	accountNo string
	pwd       string
	balance   float64
}

func NewAccount(accountNo, pwd string, balance float64) *Account {
	if len(pwd) < 6 && len(pwd) > 10 {
		fmt.Printf("账户密码必须是六位数")
		return nil
	}
	if len(pwd) != 6 {
		fmt.Printf("账户密码必须是六位数")
		return nil
	}

	if balance < 0 {
		fmt.Printf("账户余额不正确！")
		return nil
	}
	return &Account{
		accountNo: accountNo,
		pwd:       pwd,
		balance:   balance,
	}
}

// Despite 存钱
func (account *Account) Despite(money float64, pwd string) {
	if pwd != account.pwd {
		fmt.Println("密码错误！")
		return
	}

	if money <= 0 {
		fmt.Println("输入的钱数不正确！")
		return
	}
	account.balance += money
	fmt.Println("存钱成功！")
}

// WithDraw 取钱
func (account *Account) WithDraw(money float64, pwd string) {
	if pwd != account.pwd {
		fmt.Println("密码错误！")
		return
	}
	if money <= 0 || money > account.balance {
		fmt.Println("输入的钱数不正确！")
		return
	}
	account.balance -= money
	fmt.Println("取钱成功！")
}

// Query 查询
func (account *Account) Query(pwd string) {
	if pwd != account.pwd {
		fmt.Println("密码错误！")
		return
	}
	fmt.Printf("您的账号：%v，余额为%v\n", account.accountNo, account.balance)
}

// SetAccountNo set方法
func (account *Account) SetAccountNo(accountNo string) {
	account.accountNo = accountNo
}

func (account *Account) SetPwd(pwd string) {
	if len(pwd) > 10 || len(pwd) < 6 {
		fmt.Println("密码长度设置不正确！")
	}
	account.pwd = pwd
}

func (account *Account) SetBalance(balance float64) {
	if balance <= 0 {
		fmt.Println("钱数不正确！")
	}
	account.balance = balance
}

func (account *Account) GetAccountNo() string {
	return account.accountNo
}

func (account *Account) GetPwd() string {
	return account.pwd
}

func (account *Account) GetBalance() float64 {
	return account.balance
}
